package com.wonders.ghy.juc.sync和Lock区别;

/**
 * 题目：sync和ReentrantLock有什么区别
 * 1 原始构成
 * synchronized 是关键字 基于JVM层面
 *      monitorenter（底层是通过monitor对象来完成，其实wait/notify等方法也
 *      依赖于monitor对象，只有在同步块或方法中才能调用）
 *      monitorexit
 * Lock是具体类（juc下的包）是api层面的锁
 *
 * 2使用方法
 *  sync不需要用户去手动释放锁，当sync代码执行完之后系统就会自动让线程释放锁的占用
 *  lock则需要用户去手动释放锁，如果没有主动释放锁，就可能产生死锁现象
 *
 * 3 等待是否可以中断
 *  sync不可中断，除非抛出异常或者正常运行完成
 *  lock可中断 1.设置超时时间 tryLock(Long timeout,TimeUnit unit)
 *             2.lockInterruptibly()放代码块中，调用interrupt()方法可中断
 * 4加锁是否公平
 *  sync非公平锁
 *  lock两者都可以，默认非公平锁，构造方法可传入boolean值
 *
 * 5锁绑定多个条件Condition
 * sync没有
 * lock用来实现分组唤醒需要唤醒的线程们，可以精准唤醒，而不像sync只能
 * 随机唤醒或者全部唤醒
 * 具体案例搜索    ThreadOrderAccess 类
 */
public class SyncAndReentrantLockDemo {
}
